function dice12_vao_gen(gl, programInfo_cube){
	//dice12
	const VAO_dice12 = gl.createVertexArray();
	gl.bindVertexArray(VAO_dice12);
	const VBO_dice12 = gl.createBuffer();
	gl.bindBuffer(gl.ARRAY_BUFFER, VBO_dice12);
	{
	const phi = 1.618 / 1.732;//同下
	const phi_1 = 1/ 1.618 / 1.732;
	const length_m = 1.0 / 1.732;//正方体坐标缩放

	let dice12 = [
		phi_1, 0, phi, 				0, 0, 0,		0, 0,
		length_m, length_m, length_m, 	0, 0, 0,		0, 0,
		phi, phi_1, 0,				0, 0, 0,		0, 0,
		
		phi_1, 0, phi, 				0, 0, 0,		0, 0,
		phi, phi_1, 0,				0, 0, 0,		0, 0,
		phi, -phi_1, 0,				0, 0, 0,		0, 0,
		
		phi_1, 0, phi, 				0, 0, 0,		0, 0,
		phi, -phi_1, 0,				0, 0, 0,		0, 0,
		length_m, -length_m, length_m,	0, 0, 0,		0, 0,
		
		
		phi_1, 0, -phi, 				0, 0, 0,		0, 0,
		length_m, -length_m, -length_m,0, 0, 0,		0, 0,
		phi, -phi_1, 0,				0, 0, 0,		0, 0,
		
		phi_1, 0, -phi, 				0, 0, 0,		0, 0,
		phi, -phi_1, 0,				0, 0, 0,		0, 0,
		phi, phi_1, 0,				0, 0, 0,		0, 0,
		
		phi_1, 0, -phi, 				0, 0, 0,		0, 0,
		phi, phi_1, 0,				0, 0, 0,		0, 0,
		length_m, length_m, -length_m,	0, 0, 0,		0, 0,
		
		
		-phi_1, 0, phi, 				0, 0, 0,		0, 0,
		-length_m, -length_m, length_m,0, 0, 0,		0, 0,
		-phi, -phi_1, 0,				0, 0, 0,		0, 0,
		
		-phi_1, 0, phi, 				0, 0, 0,		0, 0,
		-phi, -phi_1, 0,				0, 0, 0,		0, 0,
		-phi, phi_1, 0,				0, 0, 0,		0, 0,
		
		-phi_1, 0, phi, 				0, 0, 0,		0, 0,
		-phi, phi_1, 0,				0, 0, 0,		0, 0,
		-length_m, length_m, length_m,	0, 0, 0,		0, 0,
		
		
		-phi_1, 0, -phi, 				0, 0, 0,		0, 0,
		-length_m, length_m, -length_m,0, 0, 0,		0, 0,
		-phi, phi_1, 0,				0, 0, 0,		0, 0,
		
		-phi_1, 0, -phi, 				0, 0, 0,		0, 0,
		-phi, phi_1, 0,				0, 0, 0,		0, 0,
		-phi, -phi_1, 0,				0, 0, 0,		0, 0,
		
		-phi_1, 0, -phi, 				0, 0, 0,		0, 0,
		-phi, -phi_1, 0,				0, 0, 0,		0, 0,
		-length_m, -length_m, -length_m,0, 0, 0,		0, 0,
		
	];
		
	//顶点数据生成函数
	for(let i = 0;i < 36;i += 1){
		dice12[36 * 8 + i * 8 + 1] = dice12[i * 8];
		dice12[36 * 8 + i * 8 + 2] = dice12[i * 8 + 1];
		dice12[36 * 8 + i * 8] = dice12[i * 8 + 2];
		
		dice12[36 * 8 * 2 + i * 8 + 2] = dice12[i * 8];
		dice12[36 * 8 * 2 + i * 8] = dice12[i * 8 + 1];
		dice12[36 * 8 * 2 + i * 8 + 1] = dice12[i * 8 + 2];
	}
	
	//法向量生成函数
	for(let i = 0;i < 12;i += 1){
		//cal
		let v1 = [
			dice12[i * 9 * 8] - dice12[i * 9 * 8 + 8],
			dice12[i * 9 * 8 + 1] - dice12[i * 9 * 8 + 8 + 1],
			dice12[i * 9 * 8 + 2] - dice12[i * 9 * 8 + 8 + 2],
		];
		
		let v2 = [
			dice12[i * 9 * 8 + 16] - dice12[i * 9 * 8 + 8],
			dice12[i * 9 * 8 + 16 + 1] - dice12[i * 9 * 8 + 8 + 1],
			dice12[i * 9 * 8 + 16 + 2] - dice12[i * 9 * 8 + 8 + 2],
		];
		
		let norm = normal_gen(v1, v2);
		//
		for(let j = 0;j < 9;j += 1){
			dice12[i * 9 * 8 + j * 8 + 3] = norm[0];
			dice12[i * 9 * 8 + j * 8 + 4] = norm[1];
			dice12[i * 9 * 8 + j * 8 + 5] = norm[2];
		}
	}
	
	//纹理坐标生成
	for(let row = 0;row< 4;row += 1){
		for(let col = 0;col < 5;col += 1){
			let i = row * 5 + col;
			if(i >= 12){
				break;
			}
			
			dice12[i * 9 * 8 + 6] = (col + 0.5) / 5.0;
			dice12[i * 9 * 8 + 7] = (5.0 - row) / 5.0;
			
			dice12[i * 9 * 8 + 8 + 6] = (col + 1.0) / 5.0;
			dice12[i * 9 * 8 + 8 + 7] = (5.0 - row - 0.382) / 5.0;
			
			dice12[i * 9 * 8 + 16 + 6] = (col + 0.5 + 0.325) / 5.0;
			dice12[i * 9 * 8 + 16 + 7] = (5.0 - row - 1.0) / 5.0;
			
			
			dice12[i * 9 * 8 + 24 + 6] = (col + 0.5) / 5.0;
			dice12[i * 9 * 8 + 24 + 7] = (5.0 - row) / 5.0;
			
			dice12[i * 9 * 8 + 32 + 6] = (col + 0.5 + 0.325) / 5.0;
			dice12[i * 9 * 8 + 32 + 7] = (5.0 - row - 1.0) / 5.0;
			
			dice12[i * 9 * 8 + 40 + 6] = (col + 0.5 - 0.325) / 5.0;
			dice12[i * 9 * 8 + 40 + 7] = (5.0 - row - 1.0) / 5.0;
			
			
			dice12[i * 9 * 8 + 48 + 6] = (col + 0.5) / 5.0;
			dice12[i * 9 * 8 + 48 + 7] = (5.0 - row) / 5.0;
			
			dice12[i * 9 * 8 + 56 + 6] = (col + 0.5 - 0.325) / 5.0;
			dice12[i * 9 * 8 + 56 + 7] = (5.0 - row - 1.0) / 5.0;
			
			dice12[i * 9 * 8 + 64 + 6] = (col) / 5.0;
			dice12[i * 9 * 8 + 64 + 7] = (5.0 - row - 0.382) / 5.0;
		}
	}
	gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(dice12), gl.STATIC_DRAW);
	
	}
	gl.vertexAttribPointer(
		programInfo_cube.attribLocations.vertexPosition,
		3,
		gl.FLOAT,
		false,
		32,
		0,
	);
	gl.vertexAttribPointer(
		programInfo_cube.attribLocations.normPosition,
		3,
		gl.FLOAT,
		false,
		32,
		12,
	);
	gl.vertexAttribPointer(
		programInfo_cube.attribLocations.coordPosition,
		2,
		gl.FLOAT,
		false,
		32,
		24,
	);
	gl.enableVertexAttribArray(programInfo_cube.attribLocations.vertexPosition);
	gl.enableVertexAttribArray(programInfo_cube.attribLocations.normPosition);
	gl.enableVertexAttribArray(programInfo_cube.attribLocations.coordPosition);
	
	return VAO_dice12;
}